//正则方法的一个扩展 和 es5之间的一个对比
//1.构造函数发生了什么变化
//2.字符串支持的什么方法
//3.正则修饰符
{
  let regex = new RegExp('xyz','i');
  let regex2 = new RegExp(/xyz/i);
  console.log(regex.test('xyz123'));//true
  console.log(regex2.test('xyz123'));//true
  //es6中允许第一个参数是正则表达式的方式，第二个参数会替换正则表达式的参数
  let regex3 = new RegExp(/xyz/ig,'i');
  //flags  是用来获取正则对象的修饰符的一个属性 在es6中是新增的一个属性
  console.log(regex3.flags);
}

{
  let s = 'bbb_b_bb';
  let a1=/b+/g;
  let a2=/b+/y;
  //用g和y匹配，都是全局匹配，g是从上一次匹配的位置继续匹配，直到找到自己的匹配位置为止，不强调必须在匹配后的第一个匹配；y要求从下面的第一个字符开始，如果不满足直接返回null
  console.log('one',a1.exec(s),a2.exec(s));//'bbb','bbb'
  console.log('two',a1.exec(s),a2.exec(s));//'b',null
//sticky属性可以看到是否开启了y修饰符的属性
  console.log(a1.sticky,a2.sticky);//false,true
}

{
  /*添加 u 修饰符  把四个字节当做是一个字母
  一个编码变成四个字节当做两个字母
  */
  console.log('u-1',/^\uD83D/.test('\uD83D\uDC2A'));//true
  console.log('u-2',/^\uD83D/u.test('\uD83D\uDC2A')); //false
  //{}包裹表示的是一个uncode的一个字符，如果是要匹配uncode字符的话一定要加上u修饰符
  console.log(/\u{61}/.test('a'));//false
  console.log(/\u{61}/u.test('a'));//true
//正则匹配 .可以识别任何字符，能识别小于0，x的uncode字符，如果超过两个字节就没办法识别了,一定要加u这个修饰符；
console.log(`\u{20BB7}`);
let s='𠮷';
console.log('u',/^.$/.test(s));//false
//如果字符串的uncode编码超过两个字节的话， 加上u修饰符就可以进行匹配
console.log('u',/^.$/u.test(s));//true
console.log('U2',/𠮷{2}/.test('𠮷𠮷'));//false
console.log('U2',/𠮷{2}/u.test('𠮷𠮷'));//true

}
